//
// Created by 11067 on 2023/3/6.
//

#ifndef WORD_LIST_CORE_ERRORS_H
#define WORD_LIST_CORE_ERRORS_H
#include <cstring>
#include <string>
#include "../common.h"
//#define FFI
#ifndef FFI
// 使用异常来处理错误
#define USE_EXCEPTION
#endif
#define INVALID_OPTION (-1)
#define FILE_NOT_EXIST (-2)
#define FILE_INVALID (-3)
#define WORD_CIRCLE (-4)
#define RESULT_TOO_LONG (-5)
#define ALLOC_FAILED (-6)

const int MAX_RESULT_SIZE = 20000;
inline void err(const std::string& msg) {
    fprintf(stderr, "%s", msg.c_str());
}
//错误信息缓冲区，（显然线程不安全）
extern "C" DLLEXPORT char error_msg[256];
extern "C" DLLEXPORT int error_flag; //错误标志位
/**
 * 把错误信息放入缓冲区，给GUI使用
 * @param msg 错误信息
 */
inline void push_err(const std::string& msg) {
    strcpy_s(error_msg, 256,msg.c_str());
    error_flag = 1;
}

#ifdef USE_EXCEPTION
#include "../exceptions/WordListException.h"
#define ERR(ERR_CLASS,MSG) throw ERR_CLASS(MSG)
#else
#define ERR(ERR_CLASS,MSG) push_err(#ERR_CLASS MSG)
#endif

#endif //WORD_LIST_CORE_ERRORS_H
